/*global NdefPlugin, Ndef */

var toast = cordova.require('toast');
var vUrl = null;

var wrt = {
	    init: function () {
	        this.bind();
	    },
	    bind: function () {
	        document.addEventListener('deviceready', this.deviceready, false);
	    },
	    deviceready: function () {
	    	  
	    	  function win() {
	    	    console.log("Listening for NDEF tags");
	    	  }
	    	  function fail() {
	    	    alert('Failed to register NFC Listener');
	    	  }

	    	  nfc.addTagDiscoveredListener(writeTag, win, fail);
	    	
	    	 document.addEventListener("menubutton", showSampleData, false);
	    },
	    stopnfc: function () {
	        this.devicestop();
	    },
	    devicestop: function() {
	    	  function win() {
		    	    console.log("-----------Remove Complete");
		    	  }
		    	  function fail() {
		    	    alert('Failed to remove NFC Listener');
		    	  }

	    	nfc.removeTagDiscoveredListener(function(nfcEvent){
	    	    alert('Remove NFC Listener OK');
	    	}, win, fail);
	    }
};

//url encoding, decoding 함수
function fEncode(text) {
	return encodeURI(text).replace(/'/g,"%27").replace(/"/g,"%22");	
}
function fDecode(text) {
	return decodeURI(text.replace(/\+/g,  "+"));
}






jQuery.urlShortener.settings.apiKey = 'AIzaSyAGyIXtncjNPEgW7JFLjHkVEho0y5piD6U';
function fShortUrl(longUrlLink) {
//    $("#shortUrlInfo").html("<img src='img/loading.gif'/>");
//    var longUrlLink = $("#longUrl").val();
    jQuery.urlShortener({
        longUrl: longUrlLink,
        success: function (shortUrl) {
//            $("#shortUrlInfo").html(shortUrl);
        	alert('aaa '+shortUrl);
//        	vUrl = shortUrl;
        	
      	  var message = [
			ndef.spetRecord(shortUrl.substring(7)),
			ndef.textRecord(shortUrl.substring(7)),
			//ndef.uriRecord(vUrl), //fShortUrl로 주소 단축 후 ndef 타입으로 변환
			ndef.mimeMediaRecord('text/spet', nfc.stringToBytes('On'))
			];
        	
        	
      	  /* NFC 기록 함수 */
        	nfc.write(
        		  message,
//                [record], 
                function () {
        			  //NFC 기록 성공 시
                    toast.showShort("Wrote data to tag.");
                    navigator.notification.beep(1);
                    navigator.notification.vibrate(500);
                    navigator.notification.alert(message);

                    //nfc -> Filesystem(filename: vI, contents: url) 
                    
                    /* 131203(09:35) 추가됨(YMH) */ 
                    /* writeFile 함수 */ 
                    (function(){ 
                        console.log("checkpoint 1"); 
                        window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, onFSSuccess, onFSError); 
                    })(); 
          
                    function onFSSuccess(fileSystem){ 
//                      console.log('where is the file? ' + fileSystem.root.name); 
                        console.log("checkpoint 2"); 
          
                        /* 저장할 파일 디렉토리 지정(/root/AAA) */ 
                        fileSystem.root.getDirectory("AAA", {create:true, exclusive:false}, gotFSDir, onFSError); 
                    } 
          
                    function gotFSDir(dirEntry){  
                        console.log("checkpoint 3"); 
                          
                        /* 저장할 파일 이름 지정(NFC ID값으로 대체) */ 
                        dirEntry.getFile(vI + '.txt', {create:true, exclusive:true}, gotFileEntry, onFSError); 
                    } 
          
                    function gotFileEntry(fileEntry){ 
                        console.log("checkpoint 4"); 
                        fileEntry.createWriter(gotFileWriter, onFSError); 
                    } 
          
                    function gotFileWriter(writer){ 
                        writer.onwrite = function(evt){ 
                            console.log("checkpoint 5: write Success!"); 
                            alert("저장 성공"); 
                            SrcSlt(); // 파일 저장 후 사진 이미지 추가(SB, @1209)
                        }; 
                          
                        /* 저장할 데이터(NFC에 저장된 문자열로 대체)! */ 
                        writer.write(url + '\n');
                    } 
          
                    function onFSError(err){ 
                        console.log(err.code); 
                    } 
                      
                    /* WRITE 함수 끝 */ 
        		  }, 
                function (reason) {
        			  //NFC 기록 오류발생 시
                    navigator.notification.alert(reason, function() {}, "다시 탭(Tap)해주세요.");
                }
          ); 
        	  /* NFC 기록 함수 */
        	
        	
        	
        	
        	
        	
        	
        	
        	
        	
        	return shortUrl;
        },
        error: function(err){
//        	$("#shortUrlInfo").html(JSON.stringify(err));
        	alert(JSON.stringify(err));
        }
    });
};


function writeTag(nfcEvent) {
  // ignore what's on the tag for now, just overwrite

	//html에서 저장할 값을 가져옴
	  var vI = document.forms[0].elements["i"].value,
	    vO = document.forms[0].elements["o"].value,
	    vN = document.forms[0].elements["n"].value,
	    vT = document.forms[0].elements["t"].value,
	    vM = document.forms[0].elements["m"].value,
	    vC = document.forms[0].elements["c"].value,
/*	  var mimeType = document.forms[0].elements["mimeType"].value,
	    payload = document.forms[0].elements["payload"].value,
	    url = document.forms[0].elements["url"].value,
	    record = ndef.mimeMediaRecord(mimeType, nfc.stringToBytes(payload)),
*/	  	launch = ndef.mimeMediaRecord('text/spet', nfc.stringToBytes('On')),//mimeType
//		launch = ndef.mimeMediaRecord('spetz', nfc.stringToBytes('llun.com/nfc'));

		//URL 인코드 후 url 변수에 저장
		url = fEncode('llun.com/v.html?i='+vI+'&o='+vO+'&n='+vN+'&t='+vT+'&m='+vM+'&c='+vC);
//		url = fEncode('http://llun.com/v.html?i='+vI+'&o='+vO+'&n='+vN+'&t='+vT+'&m='+vM+'&c='+vC);
	    record = ndef.uriRecord('http://'+url);
	    
//	    vUrl = fShortUrl(url); //delay 필요
//	    setTimeout(function(){alert('delay 2' + vUrl);}, 2000);
	  
	  var message = [
	                 ndef.spetRecord(url),
//	                 ndef.textRecord(url),
	                 ndef.uriRecord('http://' + url), //fShortUrl로 주소 단축 후 ndef 타입으로 변환
	                 launch
	  ];

	 /* NFC 기록 함수 */
	nfc.write(
		  message,
//        [record], 
        function () {
			  //NFC 기록 성공 시
            toast.showShort("Wrote data to tag.");
            navigator.notification.beep(1);
            navigator.notification.vibrate(500);
            navigator.notification.alert(message);

            //nfc -> Filesystem(filename: vI, contents: url) 
            
            
            var vUrl;
            /* 131203(09:35) 추가됨(YMH) */ 
            /* writeFile 함수 */ 
            function fLogWrite(url){ 
                console.log("checkpoint 1"); 
                vUrl = url;
                window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, onFSSuccess, onFSError); 
            } 
/*            (function(){ 
                console.log("checkpoint 1"); 
                window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, onFSSuccess, onFSError); 
            })(); */
            
            function onFSSuccess(fileSystem){ 
//              console.log('where is the file? ' + fileSystem.root.name); 
                console.log("checkpoint 2"); 
  
                /* 저장할 파일 디렉토리 지정(/root/AAA) */ 
                fileSystem.root.getDirectory("AAA", {create:true, exclusive:false}, gotFSDir, onFSError); 
            } 
  
            function gotFSDir(dirEntry){  
                console.log("checkpoint 3"); 
                  
                /* 저장할 파일 이름 지정(NFC ID값으로 대체) */ 
                dirEntry.getFile(fParamR('i',url) + '.txt', {create:true, exclusive:true}, gotFileEntry, onFSError); 
            } 
  
            function gotFileEntry(fileEntry){ 
                console.log("checkpoint 4"); 
                fileEntry.createWriter(gotFileWriter, onFSError); 
            } 
  
            function gotFileWriter(writer){ 
                writer.onwrite = function(evt){ 
                    console.log("checkpoint 5: write Success!"); 
                    alert("저장 성공"); 
                }; 
                  
                /* 저장할 데이터(NFC에 저장된 문자열로 대체)! */ 
                writer.write(url + '\n');
            } 
  
            function onFSError(err){ 
                console.log(err.code); 
            } 
              
            /* WRITE 함수 끝 */ 
		  }, 
        function (reason) {
			  //NFC 기록 오류발생 시
            navigator.notification.alert(reason, function() {}, "다시 탭(Tap)해주세요.");
        }
  );   
 /* NFC 기록 함수 */

}

var data = [
    {
        mimeType: 'text/plain',
        payload: 'Hello PhoneGap'
    },
    {
        mimeType: 'text/pg',
        payload: 'Hello PhoneGap'
    },
    {
        mimeType: 'text/x-vCard',
        payload: 'BEGIN:VCARD\n' +
            'VERSION:2.1\n' +
            'N:Coleman;Don;;;\n' +
            'FN:Don Coleman\n' +
            'ORG:Chariot Solutions;\n' +
            'URL:http://chariotsolutions.com\n' +
            'TEL;WORK:215-358-1780\n' +
            'EMAIL;WORK:dcoleman@chariotsolutions.com\n' +
            'END:VCARD'
    },
    {
        mimeType: 'text/x-vCard',
        payload: 'BEGIN:VCARD\n' +
            'VERSION:2.1\n' +
            'N:Kwon;SB;;;\n' +
            'FN:Sun-beom Kwon\n' +
            'ORG:SCSA;\n' +
            'URL:http://llun.com\n' +
            'TEL;WORK:010-6761-1144\n' +
            'EMAIL;WORK:null@llun.com\n' +
            'END:VCARD'
    },
    {
        mimeType: 'game/rockpaperscissors',
        payload: 'Rock'
    },
    {
        mimeType: '',
        payload: ''
    }
];

var index = 0;

function showSampleData() {
    var mimeTypeField = document.forms[0].elements["n"],
      payloadField = document.forms[0].elements["m"],
      record = data[index];
    
    index++;
    if (index >= data.length) {
        index = 0;
    }
    
    mimeTypeField.value = record.mimeType;
    payloadField.value = record.payload;    
}
